//
//  LWOAuthViewController.swift
//  LW_Weibo
//
//  Created by 刘伟 on 16/7/10.
//  Copyright © 2016年 LWSpro. All rights reserved.
//

import UIKit
import SVProgressHUD
import AFNetworking


//微博appKey  2047152747    3f9f6fe20ba002d7fbb14431a0cbc0fb
let WeiboAPPKey = "2047152747"

//微博appsecret
let WeiboAppSecret = "3f9f6fe20ba002d7fbb14431a0cbc0fb"

//微博授权回调页
let WeiboRedirect_Uri = "http://www.itcast.cn"


class LWOAuthViewController: UIViewController {
    
    //MARK: - 懒加载创建微博的登录页面
    private lazy var webView: UIWebView = UIWebView()
    
    override func loadView() {
        
        super.loadView()
        
        webView.delegate = self
        
        //不透明 修复拉动webView时,下方出现黑条的bug
//        webView.alpha = false
        
        //自定义视图
        view = webView
        
        
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        
        view.backgroundColor = UIColor.whiteColor()
        
        //创建导航栏的取消和自动填写按钮
        setUpNavUIBarButton()
        
        //请求登录 即显示出登录页面
        requestOAuthLogin()
        
        
    }

    
    
    func setUpNavUIBarButton() {
        
        navigationItem.title = "微博登录"
        
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "取消", target: self, action: "cancelAction")
        
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", target: self, action: "autoFillAction")
        
        
        
    }
    
    
    
    //MARK: - 按钮点击事件
    func cancelAction() { //取消
        
        //删除菊花转
        SVProgressHUD.dismiss()
        
        //销毁控制器
        dismissViewControllerAnimated(true, completion: nil)
        
        
    }
    
    
    
    func autoFillAction() { //自动填充13297510591  
        

    webView.stringByEvaluatingJavaScriptFromString("document.getElementById('userId').value = '13297510591'; document.getElementById('passwd').value = 'lw123456789'")
        
        
        
    }
    
    
    //MARK: - 进入时发送请求显示登录界面
    private func requestOAuthLogin() {
        
        //请求地址
        let url = "https://api.weibo.com/oauth2/authorize?client_id=\(WeiboAPPKey)&redirect_uri=\(WeiboRedirect_Uri)"
        
        //准备请求对象 通过请求地址创建请求对象
        let request = NSURLRequest(URL: NSURL(string: url)!)
        
        //加载请求  这时会跳到UIWebViewDelegate代理方法中
        webView.loadRequest(request)
        
        
        
    }
    
    
    
    
    /*
    
      * 获取access_token的方法和获取用户信息的方法抽取到了viewModel里面了
    
    //MARK: - 通过授权码获取access_token
    private func requestAccesstoken(code: String) {
        
        //发送网络请求  获取access_token
        LWNetworkTools.sharedTools.ruquestAccesstoken(code) { (response, error) -> () in
            
            
            if error != nil {//失败了
                
                print(error)
                
                return
                
            }
            
            //  代码执行到这里  说明请求成功  并且放回了数据
            guard let dic = response as? [String : AnyObject] else { //类型强转 转成字典  as? 就已经做了判断 如果转成失败 那么就不转化
                
                print("这不是一个正确的json格式,不然就能解包了")
                
                return
                
            }
            
            //代码到这里  dic一定有值 并且是由网络传回来的数据解包并转换成的字典类型
            
            //获取到的值  转换成模型
            let userAccount = LWUserAccount(dic: dic)
            
        //userAccount 里面已经获取到了 access_token 和 uid
            
            //通过userAccount.access_token 和 uid 获取用户信息
            //调用方法 是在闭包内 所以需要加上self  没有引用循环
            self.requestUserInfo(userAccount)
        }
        
        
    }
    
    
    
    //MARK: - 获取用户信息
    private func requestUserInfo(userAccount: LWUserAccount) {
        
        
        //发送网络请求
        LWNetworkTools.sharedTools.requestUserInfo(userAccount) { (response, error) -> () in
            
            if error != nil {//请求失败了
                
                print(error)
                
                return
                
                
            }
            
            
            guard let dic = response as? [String : AnyObject] else {
                
                print("返回的数据有误  不是json类型的  无法转换")
                
                return
                
            }
            
            
            
            //这里 dic已经有值 并且是我们想要的类型
            //我们获取字典里面的值
            let name = dic["name"]
            let avatar_large = dic["avatar_large"]
            
            //将获取的用户名和头像存到模型中  然后存入归档中
            userAccount.name = name as? String
            userAccount.avatar_large = avatar_large as? String
            
            //将获取到的用户名和头像保存起来
            userAccount.saveUserAccount()
            
            
        }
        
        
    }
    
    */
    
}




//MARK: - 协议

extension LWOAuthViewController: UIWebViewDelegate {
    
    
    //将要加载请求时  就会走这里 意思是  只要有网络请求就会走这里
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        
        guard let url = request.URL else { //如果网络请求为nil  就会走这个方法
            
            return false
            
        }
        
        
        //打印一下取消回调页时的url  即点击授权页的取消时  url是多少
        print(url)
        
        //到了这里  url 是一定有值的
        //获取url的绝对地址
        if !url.absoluteString.hasPrefix(WeiboRedirect_Uri) {//在这里 只要是以回调页开头的就不会走 return true  因为取反了
            
            
            //只要不是以回调页开头就会走return true
            return true
            
            
        }
        
        
        //到这里  url就是以回调页开头的  也即是我们关系的url字符串
        
        //获取url后面的字符串query 条件 让query是以code= 开头
        if let query = url.query where query.hasPrefix("code=") {
            
            //截取code
            let code = query.substringFromIndex("code=".endIndex)
            
            //获取到了code之后  我们就可以通过授权码发送网络请求获取accesstoken 令牌了  然后就能登录获取用户信息
            LWUserAccountViewModel.sharedUserAccount.requestAccesstoken(code, successBack: { (isSuccess) -> () in
                
                if isSuccess {
                    
                    //登录成功  那么就进入到欢迎页面 使用通知(在完全没有联系的两个控制器之间相互传递 使用通知) 进入欢迎页面 在UIApplication里面设置 即替换根控制器
                    
                    
                    //这里登录成功后,将当前控制器dismiss掉 闭包内 要使用self 没有引用循环
                    self.dismissViewControllerAnimated(true, completion: { () -> Void in
                        
                        //销毁当前控制器之后发送通知  写在completion里面
                        NSNotificationCenter.defaultCenter().postNotificationName(SwitchRootVCNotification, object: self)
                        
                        
                    })
                   
                    
                    
                }else {
                    
                    print("登录失败")
                    
                    
                }
                
                
            })
            
            
        } else { //点击取消时,就不是以"code="开头的了  这时dismiss  webView就行了
            //省略了self  这里的self是webView
            dismissViewControllerAnimated(true, completion: nil)
            
            
            
        }
        
        
        
        

        
        
        
        
        
        return false
        
    }
    
    
    //开始加载时 菊花转开启
    func webViewDidStartLoad(webView: UIWebView) {
        
        SVProgressHUD.show()
        
    }
    
    //加载完成  消除菊花转
    func webViewDidFinishLoad(webView: UIWebView) {
        
        SVProgressHUD.dismiss()
        
    }
    
    //加载失败
    func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
        
         SVProgressHUD.dismiss()
        
    }
    
}




